package cl.tinet.reservaCD;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import cl.tinet.reservaCD.modelo.Reserva;
import cl.tinet.reservaCD.modelo.Usuario;
import cl.tinet.reservaCD.reserva.ReservaBean;

/**
 * Managed Bean del reserva.
 * 
 * @author Carlos Duque
 * 
 */
@ManagedBean
@ViewScoped
public class ReservaMB implements Serializable {

    /**
     * Serial de la clase.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Instancia de reserva.
     */
    private Reserva reserva;

    /**
     * Lista con los usuarios.
     */
    private List<Reserva> reservas;

    /**
     * Lista con los usuarios.
     */
    private List<Reserva> reservasUsuario;

    /**
     * Instancia de bean Usuario.
     */
    @EJB(mappedName = "beanReserva", name = "beanReserva")
    private transient ReservaBean bean;

    /**
     * Instanciador de nuevo Entity Manager .
     */
    @PostConstruct
    public void init() {
        if (reserva == null) {
            reserva = new Reserva();
        }
    }

    /**
     * MB de sala.
     */
    @ManagedProperty("#{salaMB}")
    private SalaMB salaMB;

    /**
     * MB de usuario.
     */
    @ManagedProperty("#{usuarioMB}")
    private UsuarioMB suarioMB;

    /**
     * Metodo get de salaMB.
     * 
     * @return salaMB.
     */
    public SalaMB getSalaMB() {
        return salaMB;
    }

    /**
     * Metodo set de salaMB.
     * 
     * @param salaMB
     *            salaMB.
     */
    public void setSalaMB(SalaMB salaMB) {
        this.salaMB = salaMB;
    }

    /**
     * Metodo get de suarioMB.
     * 
     * @return suarioMB.
     */
    public UsuarioMB getSuarioMB() {
        return suarioMB;
    }

    /**
     * Metodo set de suarioMB.
     * 
     * @param suarioMB
     *            suarioMB.
     */
    public void setSuarioMB(UsuarioMB suarioMB) {
        this.suarioMB = suarioMB;
    }

    /**
     * Metodo get de reserva.
     * 
     * @return reserva.
     */
    public Reserva getReserva() {
        return reserva;
    }

    /**
     * Metodo set de reserva.
     * 
     * @param reserva
     *            una reserva
     */
    public void setReserva(Reserva reserva) {
        this.reserva = reserva;
    }

    /**
     * Metodo agregar Reserva MG.
     * 
     * @return a la pagina que se va a dirigir.
     */
    public String agregarReservaMG() {

        reserva.setSala(salaMB.getSala().getNombreSala());
        reserva.setUsuario(suarioMB.getUsuario().getNombreUsuario());

        bean.crearReserva(reserva);

        return "usuarioNormal";

    }

    /**
     * Metodo agregar Reserva MG.
     * 
     * @return a la pagina que se va a dirigir.
     */
    public String agregarReservaAdministradorMG() {

        reserva.setSala(salaMB.getSala().getNombreSala());
        reserva.setUsuario(suarioMB.getUsuario().getNombreUsuario());

        bean.crearReserva(reserva);

        return "usuarioAdministrador";

    }

    /**
     * Metodo que retorna la lista de las reserva.
     * 
     * @return lista con los usuarios de la base de datos
     */
    public List<Reserva> listarReservaMG() {
        reservas = bean.listaReserva();
        return reservas;
    }

    /**
     * Metodo que retorna la lista de las reserva del usuario.
     * 
     * @return lista con los usuarios de la base de datos
     * @param usuarioBucarListar
     *            usuario que se va a buscar las reserva.
     */
    public List<Reserva> listarReservaUsuarioMG(Usuario usuarioBucarListar) {
        reservasUsuario = bean.listaReservaUsuario(usuarioBucarListar);
        return reservasUsuario;
    }

    /**
     * Metodo borrar una sala MG.
     * 
     * @return a la pagina que se va a dirigir.
     */
    public String borrarUsuarioAdministradorMG() {

        bean.eliminarReserva(reserva);

        return "reserva";
    }

    /**
     * Metodo borrar una sala MG.
     * 
     * @return a la pagina que se va a dirigir.
     */
    public String borrarUsuarioMG() {

        bean.eliminarReserva(reserva);

        return "listarReservaUsuario";
    }

    /**
     * Metodo que carga el grip.
     * 
     * @param reservaBuscar
     *            usuario a cargar en el pop up
     * @throws UsuarioException
     *             no existe usuario.
     */
    public void mostrarBorrarReserva(Reserva reservaBuscar) {

        this.reserva = bean.buscarReservaId(reservaBuscar);
        org.primefaces.context.RequestContext.getCurrentInstance().update(
                "formBorrar:gridBorrar");
        org.primefaces.context.RequestContext.getCurrentInstance().execute(
                "PF('dialogoBorrarSala').show()");

    }

}
